const fs = require("fs");
const rs = fs.createReadStream("test.txt", {
  flags: "r",
  encoding: null,
  fd: null,
  mode: 438,
  autoClose: true,
  start: 0,
  // end: 2,
  highWaterMark: 1, //每次取多少字节数据
  // 你的 highWaterMark: 1 只是设置了每次从文件流读取的字节数，
  // 但它不会限制整个文件的读取，data 事件会不断触发，直到整个文件被读取完毕。
});
let data = "";
// 处理流事件 --> data, end, and error

rs.on("data", function (chunk) {
  // console.log("读取到的 chunk:", chunk.toString()); // 每次输出 1 个字节
  data += chunk;
});

rs.on("end", function () {
  console.log(data, "数据读取完毕end");
});

rs.on("error", function (err) {
  console.log(err.stack);
});

console.log("程序执行完毕");

// 流的原理
// const { Readable } = require("stream");
// let arr = ["lg", "md", "xs"];

// class myReadable extends Readable {
//   constructor(souce) {
//     super(souce);
//     this.souce = souce;
//   }
//   _read() {
//     let data = this.souce.shift() || null;
//     // console.log(this);
//     this.push(data); ///类的自定义方法
//   }
// }

// const zks = new myReadable(arr);
// // 事件类型	读取模式	触发方式	适用场景
// // "data"	流动模式	自动	快速消费数据
// // "readable"	暂停模式	手动调用 .read()	按需读取，防止数据过快消费

// zks.on("pause", () => {
//   // 人为暂停流
//   console.log("暂停", zks.isPaused());
// });

// // zks.on("data", (chunk) => {
// //   zks.pause();
// //   console.log(chunk.toString());
// // });

// zks.on("readable", () => {
//   let data = "";
//   while ((data = zks.read(2)) !== null) {
//     console.log(data.toString());
//   }
// });
